---
title: AutoLayout 自动布局
icon: Network
relatedFile: app/src/core/service/controlService/autoLayoutEngine/mainTick.tsx
---

用于在项目中对选中的可连接实体（节点）进行自动布局。该服务通过模拟物理力来调整节点位置，以达到视觉上的优化排列。

## API

### `tick()`

此方法在每个更新周期（tick）被调用，负责执行布局逻辑。仅当用户按下“g”键时，布局计算才会激活。它会处理以下两种类型的力：

- **父子节点关系力**：对于每个选中的父节点，其直接子节点会被拉向父节点，如果距离过近则会产生排斥力，以避免重叠。
- **节点间相互作用力**：所有选中的节点之间会根据它们之间的距离和各自的半径，产生相互的吸引或排斥力，以维持节点间的合理间距和分布。

## 辅助函数

### `getEntityRadius(entity: ConnectableEntity): number`

计算给定可连接实体的“半径”，该半径定义为实体碰撞盒中心到其对角线的距离的一半。

### `distanceToForce(distance: number): number`

将距离值映射为一个力的大小，用于布局计算中力的衰减。
